package com.newly.center.sys.api;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import com.newly.api.sys.feign.DatabaseClient;
import com.newly.center.sys.service.databse.api.IDatabaseService;
import com.newly.common.base.constants.ServerUriConstant;
import com.newly.common.base.entity.PageUtils;
import com.newly.common.base.entity.R;
import com.newly.common.base.entity.sys.database.po.ColumnPo;
import com.newly.common.base.entity.sys.database.po.TablePo;
import com.newly.common.base.entity.sys.database.vo.ColumnVo;
import com.newly.common.base.entity.sys.database.vo.TableVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;
import java.util.stream.Collectors;

/**
 * @program: newly-parent
 * @remark: 数据库管理接口
 * @author: guan
 * @create: 2021-11-30 18:42
 */
@RestController
@RequestMapping(ServerUriConstant.NEWLY_SYS_DATABASE)
public class DatabaseApi implements DatabaseClient {

    @Autowired
    private IDatabaseService databaseService;

    @Override
    public R listTable(Integer offset, Integer limit, String keyword) {
        PageUtils pageUtils = databaseService.getTables(offset, limit, keyword);
        if (!ObjectUtil.isEmpty(pageUtils) && !ObjectUtil.isEmpty(pageUtils.getList())) {
            List<TablePo> tablePos = pageUtils.getList();
            List<TableVo> tableVos = tablePos.stream().map(tablePo -> {
                TableVo tableVo = BeanUtil.copyProperties(tablePo, TableVo.class);
                List<ColumnPo> columns = databaseService.getColumns(tableVo.getTableName());
                if (!ObjectUtil.isEmpty(columns)) {
                    tableVo.setColumns(BeanUtil.copyToList(columns, ColumnVo.class));
                }
                return tableVo;
            }).collect(Collectors.toList());
            pageUtils.setList(tableVos);
        }
        return R.ok(pageUtils, "查询数据表数据成功");
    }


}
